package com.sbtr.business.trainingserver.service;

import com.sbtr.open.trainingserver.dto.TrainingServerDto;
import com.sbtr.open.trainingtask.dto.TrainingInfoDto;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

//import com.sbtr.business.trainingtask.dto.TrainingTaskDto;
//import com.sbtr.business.trainingtask.dto.TrainingTaskFeatureDto;

/**
 * <p>
 * 向训练服务器发送http请求
 * </p>
 *

 */
public interface ITrainingServerHttpApi {

	/**
	 * 获取当前服务器跑完已有任务所需的时间
	 * @param serverDto	服务器信息
	 * @return 返回这个机器跑完目前的已有任务需要的时间，单位秒；若请求异常，则返回 Long.MAX_VALUE
	 */
	public long getWaitTime(TrainingServerDto serverDto);
	
	/**
	 * 获取当前服务器跑完已有任务所需的时间
	 * @param serverDto	服务器信息
	 * @return 返回这个机器的任务数和资源情况
	 */
	public String getMachineStatus(TrainingServerDto serverDto);

	/**
	 * 向当前服务器加入任务
	 * @param serverDto	服务器信息
	 * @param taskDto	任务信息
	 * @return
	 */
//	public boolean addTask(TrainingServerDto serverDto, TrainingTaskDto taskDto);
	
	/**
	 * 
	 * @param serverDto
//	 * @param taskDto
	 * @return
	 */
	public boolean stopTask(TrainingServerDto serverDto, long taskId);
	
	/**
	 * 获取当前服务器任务列表以及状态 <br />
	 * <b>注意:</b> 已经训练完的任务会被移除队列，此接口获取不了已经结束的任务信息
	 * @param serverDto
	 * @return
	 */
	public List<TaskInfo> getTaskList(TrainingServerDto serverDto);
	
	/**
	 * gpu服务器是否在线(实时)
	 * 通过getTaskList接口实时检测服务器是否在线
	 * @param serverDto
	 * @return
	 */
	public boolean serverIsOnline(TrainingServerDto serverDto);
	
	@Getter
	@Setter
	public static class TaskInfo{
		private String taskid;		//任务id
		private String state;		//任务状态，state 0表示等待，1表示正在训练
		private Long waittime;		//任务等待时间
	}


	public boolean addTask(
			TrainingServerDto serverDto,
			TrainingInfoDto copyProperties);

//	public boolean addDataTypeTask(
//			TrainingServerDto serverDto,
//			TrainingTaskDataDto copyProperties);
	
	public boolean stopDataTypeTask(TrainingServerDto serverDto, long taskId);



//	public boolean addFeatureFileTypeTask(
//			TrainingServerDto serverDto,
//			String fileSize,
//			String fileName,
//			String targetName,
//			String algorithm,
//			String variable,
//			TrainingTaskFeatureDto copyProperties);

//	public boolean addFeatureTaskByDataBaseType(
//			TrainingServerDto serverDto,
//			String sql,
//			Long connId,
//			String targetName,
//			String tableName,
//			String algorithm,
//			String variable,
//			TrainingTaskFeatureDto copyProperties
//			);
}
